package guia1;
public class NumeroNatural {
	/* Definición del atributo valor */
	int valor;


	/* Constructor sin argumentos inicializa el atributo con el valor 1. */
	public NumeroNatural() {
		valor = 1;
	}

	/* Constructor con un argumentos, inicializa el atributo con el valor unNumero. */
	public NumeroNatural(int unNumero) {
		valor = unNumero;
	}

	
	/*
	   Constructor con un argumento del tipo NumeroNatural.
	   Inicializa la instancia con el valor del atributo del argumento.
	*/
	public NumeroNatural(NumeroNatural otroNumero) {
		valor = otroNumero.getValor();
	}

	/* Método que retorna el valor de atributo de la instancia */
	public int getValor() {
		return valor;
	}

	/*
	   Método que establece un nuevo valor de atributo. Si el argumento es
	   menor a cero no se cambia el valor del atributo.
	*/
	public void setValor(int nuevoValor) {
		if (nuevoValor > 0)
			valor = nuevoValor;
	}

	/*
	   Método que establece un nuevo valor de atributo a partir de la
	   instancia dada como argumento.
	*/

	public void setValor(NumeroNatural otroNumero) {
		valor = otroNumero.getValor();

	}

	/*
    El siguiente método retorna:
    -1 : si el receptor es mayor al argumento.
    0  : si el argumento y el receptor tienen el mismo valor.
    1  : si el argumento tiene mayor valor.
	 */
	public int compara(NumeroNatural otroNumeroNatural) {
		if (valor > otroNumeroNatural.getValor())
			return -1;
		else if (valor == otroNumeroNatural.getValor())
			return 0;
		else
			return 1;
	}

	/*
	   Método redefinido. Este método recibe como argumento una referencia
	   tipo Object. Retorna true en caso que el argumento sea instancia de
	   la clase NumeroNatural y tenga el mismo valor de atributo que él
	   receptor del mensaje. Caso contrario retorna false
	*/
	public boolean equals(Object otroNumero) {
		if (otroNumero instanceof NumeroNatural)
			return ((NumeroNatural) otroNumero).getValor() == valor;
		else
			return false;
	}

	/*
    Método redefinido. Retorna una cadena (instancia de la clase
    String) que representa al objeto receptor del mensaje.
	*/
	public String toString()
	{
	  return "El valor de la instancia es: " + valor;
	}

	/* 
		Retorna una nueva instancia de NumeroNatural que resulta de la suma del receptor del
		mensaje y el argumento dado: otroNumero.
	 */
	public NumeroNatural suma (NumeroNatural otroNumero) {
		return new NumeroNatural(getValor() + otroNumero.getValor());
		
	}

	/*	
 		Retorna una nueva instancia de NumeroNatural que resulta de la diferencia del receptor
		del mensaje y el argumento dado: otroNumero. Deberá considerar que esta operación
		no podrá ser realizada para ciertas situaciones, de ser así, este método retornará null.
	*/
	public NumeroNatural diferencia (NumeroNatural otroNumero) {
		if(valor >= otroNumero.getValor())
			return (new NumeroNatural(valor-otroNumero.getValor()));
		else
			return null;
		
	}
	
}
